/* MonkeyTalk - a cross-platform functional testing tool
Copyright (C) 2012 Gorilla Logic, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
package com.gorillalogic.monkeyconsole.tableview.editors;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.layout.LayoutConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.RowData;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import com.gorillalogic.monkeyconsole.tableview.TableRow;
import com.gorillalogic.monkeytalk.api.meta.API;
import com.gorillalogic.monkeytalk.api.meta.Arg;
/**
* Class to allow users to edit arguments to a command
*
* @author digitalogic8
*
*/
public class ArgumentEditorDialog extends Dialog {
/**
* Store for values to edit
*/
Map<String, String> args; // Only for passing in
/**
* Store for the dynamically created editors so we can access them later
*/
Map<String, Text> editors; // Only for reading
TableRow currentRow;
/**
* Constructor take the shell to disply the dialog on and a list of
* arguments to edit
*
* @param parentShell
* app shell
* @param nameValuePairs
* name values of arguments to edit
*/
protected ArgumentEditorDialog(Shell parentShell,
Map<String, String> nameValuePairs, TableRow currentRow) {
super(parentShell);
args = nameValuePairs;
this.currentRow = currentRow;
}
@Override
protected Control createContents(Composite parent) {
Composite contents = new Composite(parent, SWT.NONE);
contents.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
this.createButtonBar(parent);
Composite argsHolder = new Composite(contents, SWT.NONE);
FillLayout fillLayout = new FillLayout();
fillLayout.type = SWT.VERTICAL;
argsHolder.setLayout(fillLayout);
editors = new HashMap<String, Text>();
for (String name : args.keySet()) {
Composite c = new Composite(argsHolder, SWT.NONE);
RowLayout rl = new RowLayout();
c.setLayout(rl);
Label l = new Label(c, SWT.LEFT);
l.setText(name + ":");
l.setLayoutData(new RowData(125, 20));
Text input = new Text(c, SWT.BORDER);
input.setText(args.get(name));
input.setLayoutData(new RowData(200, 20));
editors.put(name, input);
}
Dialog.applyDialogFont(parent);
Point defaultMargins = LayoutConstants.getMargins();
GridLayoutFactory.fillDefaults().numColumns(2)
.margins(defaultMargins.x, defaultMargins.y)
.generateLayout(contents);
return contents;
}
@Override
protected void okPressed() {
for (String name : args.keySet()) {
args.put(name, editors.get(name).getText().trim());
}
super.okPressed();
}
public Map<String, String> getArgs() {
return args;
}
public void setArgs(Map<String, String> args) {
this.args = args;
}
public String getComposedValue() {
if(null != args.get("args")){
return args.get("args");
}
String s = "";
List<Arg> argNames2 = API.getComponent(currentRow.getComponentType())
.getAction(currentRow.getAction()).getArgs();
for (Arg arg : argNames2) {
s += args.get(arg.getName()).contains(" ") && !arg.isVarArgs() ? ("\""
+ args.get(arg.getName()) + "\"")
: args.get(arg.getName());
s += " ";
}
return s;
}
}